import 'package:flutter/cupertino.dart';
import 'package:flutter/services.dart';

/// 编辑器快捷键映射容器。
///
/// 将编辑器相关的键盘绑定集中在一处，便于统一管理和扩展。
///
/// 特性：
/// - 内置了 **Tab** 和 **Shift+Tab** 的快捷键回调；
/// - 支持通过 [extras] 参数传入更多快捷键；
/// - 使用 `CallbackShortcuts` 包装子树，对子组件生效。
class EditorKeymap extends StatelessWidget {
  /// 创建一个 [EditorKeymap]。
  ///
  /// - [child] 为需要应用快捷键的子树；
  /// - [onTab] 处理 **Tab** 键；
  /// - [onShiftTab] 处理 **Shift+Tab** 组合键；
  /// - [extras] 允许传入更多快捷键绑定（覆盖或追加）。
  const EditorKeymap({
    super.key,
    required this.child,
    required this.onTab,
    required this.onShiftTab,
    this.extras = const {},
  });

  /// 包裹的子部件，快捷键在此子树范围内生效。
  final Widget child;

  /// Tab 键的回调。
  final VoidCallback onTab;

  /// Shift+Tab 键的回调。
  final VoidCallback onShiftTab;

  /// 额外快捷键绑定表。
  ///
  /// 可传入任意 [ShortcutActivator] → [VoidCallback] 映射，
  /// 用于扩展或覆盖默认绑定。
  final Map<ShortcutActivator, VoidCallback> extras;

  @override
  Widget build(BuildContext context) {
    final bindings = <ShortcutActivator, VoidCallback>{
      const SingleActivator(LogicalKeyboardKey.tab): onTab,
      const SingleActivator(LogicalKeyboardKey.tab, shift: true): onShiftTab,
      ...extras,
    };
    return CallbackShortcuts(bindings: bindings, child: child);
  }
}
